//package com.ch.forum.controller;
//
//import com.ch.forum.bo.PayResultBo;
//import com.ch.forum.bo.WxPayOrderNotifyResponse;
//import com.ch.forum.conf.WxPayConfiguration;
//import com.ch.forum.model.RewardModel;
//import com.ch.forum.service.RewardService;
//import com.ch.forum.utils.RandomUtils;
//import com.ch.forum.utils.WxUtils;
//import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
//import com.github.binarywang.wxpay.config.WxPayConfig;
//import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
//import com.thoughtworks.xstream.XStream;
//import me.chanjar.weixin.common.util.xml.XStreamInitializer;
//import org.apache.commons.io.IOUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.*;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.io.OutputStream;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
//import static com.ch.forum.utils.WxUtils.create_nonce_str;
//
//@Controller
//@RequestMapping("/pay/")
//public class WxComtroller {
//
//    private static final Logger loger = LoggerFactory.getLogger(WxComtroller.class);
//
//    @Value("${wechat.body.vip.title}")
//    private String vipTitle;
//
//    @Value("${wechat.body.vip.productId}")
//    private String vipProductId;
//
//    @Value("${wechat.machineIp}")
//    private String machineIp;
//
//    @Value("${wechat.body.vip.price}")
//    private int vipPrice;
//
//    @Autowired
//    private WxPayConfiguration wxPayConfiguration;
//
//    @Autowired
//    private RewardService rewardService;
//
//    /**
//     *       类型：
//     *          1： 会员
//     * @param type
//     * @param response
//     */
//    @GetMapping("/unifiedOrder/{type}")
//    @ResponseBody
//    public void unifiedOrderGet(@PathVariable int type,
//                                @RequestParam(required = true) Long userId,
//                                @RequestParam(required = false) Long reUserId,
//                                @RequestParam(required = false) Long artId,
//                                @RequestParam(required = false) Double money,
//                                HttpServletResponse response) {
//
//        WxPayConfig config = wxPayConfiguration.payConfig();
//
//        String nonceStr = create_nonce_str();
////        String outTradeNo = DateUtils.getCurrentTime(DateConstants.DATE_FORMAT_6);
//        String outTradeNo = RandomUtils.getUUID().toUpperCase();
//
//        Map<String,Object> paramMap = new HashMap<String, Object>();
//        paramMap.put("appid", config.getAppId());
//        if(type == 1){
//            paramMap.put("body",vipTitle);
//        }else {
//            paramMap.put("body", "打赏");
//        }
//
//        paramMap.put("mch_id",config.getMchId());
//        paramMap.put("nonce_str",nonceStr);
//        paramMap.put("notify_url",config.getNotifyUrl());
//        paramMap.put("out_trade_no", outTradeNo);
//        // 此参数为二维码中包含的商品ID，商户自行定义
//        paramMap.put("product_id",vipProductId);
//        paramMap.put("spbill_create_ip",machineIp);
//        if(type == 1){
//            paramMap.put("total_fee",vipPrice);
//        }else {
//            paramMap.put("total_fee", money*100);
//        }
//        paramMap.put("trade_type","NATIVE");
//
//        String sign = WxUtils.getSign(paramMap,config.getKeyPath());
//        paramMap.put("sign",sign);
//
//        String xmlParam = WxUtils.maptoXml(paramMap);
//
//        String result = WxUtils.sendPostUrlParam("https://api.mch.weixin.qq.com/pay/unifiedorder",
//                xmlParam,"utf-8");
//
//        WxPayUnifiedOrderResult re = (WxPayUnifiedOrderResult)BaseWxPayResult.fromXML(result, WxPayUnifiedOrderResult.class);
//
//        String codeUrl = re.getCodeURL();
//
//        // 订单做一个记录
//        RewardModel model = new RewardModel();
//        model.setDate(new Date(System.currentTimeMillis()));
//        model.setReUserId(userId);
//        model.setOutTradeNo(outTradeNo);
//        if(type == 1){
//            model.setType(1);
//            model.setPrice(Double.valueOf(vipPrice));
//        }else {
//            model.setType(2);
//            model.setPrice(money * 100);
//        }
//        if(reUserId != null){
//            model.setReUserId(reUserId);
//        }
//        if(artId != null){
//            model.setArtId(artId);
//        }
//        rewardService.add(model);
//
//
//        // 结果re code_url
//        byte[] imgBytes = wxPayConfiguration.wxPayService(config).createScanPayQrcodeMode2(codeUrl, null, null);
//
//        // 输出图片
//        response.setHeader("Content-type","image/jpg");
//        OutputStream out = null;
//        try {
//            out = response.getOutputStream();
//            out.write(imgBytes);
//            out.close();
//        } catch (IOException e) {
//            loger.error("生成支付二维码出现异常：{}", e.getMessage());
//        }
//    }
//
//    @GetMapping("/back")
//    @ResponseBody
//    public String payBack(HttpServletRequest request, HttpServletResponse response){
//        try {
//            String xmlResult = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding());
//
//            XStream xstream = XStreamInitializer.getInstance();
//            xstream.processAnnotations(PayResultBo.class);
//            xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
//
//
//            PayResultBo result = (PayResultBo) xstream.fromXML(xmlResult);
//            if(result.getResult_code() != null &&
//                    result.getResult_code().equals("SUCCESS")){
//                // 支付成功的处理  对打赏记录修改状态  会员类型还要修改用户状态
//            }else {
//                return WxPayOrderNotifyResponse.fail("xml参数值有误");
//            }
//
//            // 要返回结果
//            return WxPayOrderNotifyResponse.success("处理成功!");
//        } catch (IOException e) {
//            loger.error("支付成功回调异常：{}", e.getMessage());
//            return WxPayOrderNotifyResponse.fail(e.getMessage());
//        }
//    }
//
//
//}
